package jishiti.counttxtfile;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

/**
 * 将count文件的段落统计出来，有多少个，每个出现的次数？
 * 将结果通过txt或excel输出到文件
 * 统计每个编码出现的次数，以及编码的总数
 * 通过字符流以字符为单位读取数据，读取到的字符若不为"，"则将其存入StringBuilder
 * 若为"，"将StringBuilder中保存的编码转为String，并存入map中统计其出现的次数
 * 统计结果，将StringBuilder清空，用于下次继续存储下一个编码
 * 最终map的长度为编码的个数，，value为编码出现的次数
 */
public class CountTxt {
    public static void main(String[] args) throws IOException {
//    创建转换输入流对象，map对象，StringBuilder对象
        InputStreamReader isr = new InputStreamReader(new FileInputStream("count源文件.txt"));
        Map<String,Integer> map = new HashMap<>();
        StringBuilder builder = new StringBuilder();
//       创建字符缓冲流输出对象
        PrintWriter pw = new PrintWriter("count.txt");//默认路径在src同目录下
//        以字符为单位读取数据，判断是否为","
        int ch = -1;//ch读取到的字符，若读取到的值为-1，则表示数据没有了
        while ((ch=isr.read())!=-1){
            if (','!=ch){
                builder.append((char)ch);//此处不强转也能正常运行
            }else {
//                将StringBuilder中的内容到处，存入map
                String code = builder.toString();
                if(!map.containsKey(code)){
                    map.put(code,1);
                }else {
                    map.put(code,map.get(code)+1);
                }
//               将StringBuilder清空
                builder.delete(0,builder.length());
            }
        }
//        将数据写入文件
        pw.write("编码总数为："+map.size());
        map.forEach((k,v)->pw.write("编码："+k+"出现的次数:"+v));
        pw.close();
        isr.close();
    }
}
